from api import models

from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed


class PublicAuthentication(BaseAuthentication):
    """普通校验，记录登录的用户"""

    def authenticate(self, request):
        # 请求头取数据，都是HTTP_大写(在django)
        token = request.META.get('HTTP_AUTHORIZATION')
        # 在认证组件中，如果返回一个None，是交给下一个组件处理
        if not token:
            return None
        user_obj = models.UserInfo.objects.filter(token=token).first()
        if not user_obj:
            return None
        return (user_obj, token)  # request.user/auth


class LoginAuthentication(BaseAuthentication):
    """必须登录认证"""

    def authenticate(self, request):
        # 请求头取数据，都是HTTP_大写(在django)
        token = request.META.get('HTTP_AUTHORIZATION')
        # 在认证组件中，如果返回一个None，是交给下一个组件处理
        if not token:
            raise AuthenticationFailed()  # 前端返回403
        user_obj = models.UserInfo.objects.filter(token=token).first()
        if not user_obj:
            raise AuthenticationFailed()
        return (user_obj, token)  # request.user/auth

